package jmat.intr;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * @author Aram Altschudjian
 *
 */

public interface Matrix{
	final static int all = java.lang.Integer.MIN_VALUE;
	public void init(Object defaultValue, ArrayList<Integer> sizes);
	public void init(Object defaultValue, Integer... sizes);
	public void init(Object defaultValue);
	public void data(Object data);
	public Object data();
	public Object val();
	public boolean valid();
	public void reset();
	public int entries();
	public ArrayList<Integer> indices();
	public void assign(Object data);
	public void assign(Matrix matrix);
	public Matrix get(Object... address);
	public Matrix get(Object address);
	public void put(Object address, Object entry);
	public ArrayList<Integer> find(Object entry);
	public ArrayList<Integer> nfind(Object entry);
	public int count(Object entry);
	public void setDim(int dimensions);
	public int getDim();
	public void setSize(ArrayList<Integer> sizes);
	public void setSize(Integer... sizes);
	public ArrayList<Integer> size();
	public int size(int dimension);
	public ArrayList<Object> list();
	public ArrayList<Object> unique();
	public boolean isEmpty();
	public boolean equals(Matrix candidate);
	public Object max();
	public int maxIndex();
	public Object min();
	public int minIndex();
	public Matrix sum();
	public Object sumAll();
	public Matrix plus(Matrix matrix);
	public Matrix plus(Number number);
	public Matrix minus(Matrix matrix);
	public Matrix minus(Number number);
	public Matrix mult(Matrix matrix);
	public Matrix mult(Number number);
	public Matrix div(Matrix matrix);
	public Matrix div(Number number);
	public Matrix log();
	public Matrix subFrom(Number minuend);
	public void extend(int dimension);
	public void extend(int dimension, int amount);
	public void delete(Object address);
	public void delete(Object... address);
	public void delete(int dimension, Object... address);
	public void delete(int dimension, Object address);
	public void setOrder(int dimension, ArrayList<Integer> order);
	public void setOrder(int dimension, Integer... order);
	public void addDim(int size, int index);
	public void setName(int dimension, int index, String name);
	public void setNames(int dimension, HashMap<String, Integer> nameToIndexMap);
	public HashMap<String, Integer> getNames(int dimension);
	public int resolve(int dimension, String name);
	public boolean isAll(Object candidate);
	public Integer[] convert(int address);
	public int convert(ArrayList<Object> address);
	public int convert(Object... address);
	public String toString();
}
